﻿using System;
using System.Collections.Generic;
//using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EntLibEC.Biz.Finance;
using EntLibEC.Biz.Sale;
using EntLibEC.Cmn;
using EntLibEC.Info.Basic;
using EntLibEC.Biz.Basic;
using EntLibEC.Info.Sale;
using EntLibEC.Shopping.Payment.PayRule;

namespace EntLibEC.Shopping.Payment
{
    public partial class pay_alipay : EntLibWebBasePage
    {
        private int sosysno = -1;
        decimal checkamt = 0;
        int customerSysNo = 0;
        SOInfo checkSo = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                sosysno = Convert.ToInt32(Request.QueryString["sosysno"].ToString());
            }
            catch
            {
                ShowError("获取SO#出错");
            }

            Login(Request.Url.ToString());

            bool soChecked = false;

            try
            {
                checkSo = SOManager.GetInstance().LoadSOMaster(sosysno);
                checkamt = Convert.ToDecimal(Request.QueryString["soamt"].ToString());
                customerSysNo = checkSo.CustomerSysNo;

                if (SOManager.GetInstance().GetEndMoney(checkSo) == checkamt)
                    soChecked = true;
            }
            catch (Exception ex)
            {
                CommonLayer.LogManagement.LogManager.WriteException(ex, "Web/Payment", CommonFunctions.GetClientIP(HttpContext.Current.Request));
                ShowError("订单支付信息不完整！");
            }
            if (soChecked == false)
                ShowError("金额不符！！！");


            lblView.Text = "<a href='/soprocess/orderdetail.aspx?sosysno=" + sosysno.ToString() + "'>查看订单</a>";

            lblSOID_1.Text = sosysno.ToString();
            lblSOAmt.Text = checkamt.ToString("######0.00"); 
            lblSODate.Text = checkSo.OrderDate.ToString(EntLibEC.Cmn.AppConst.DateFormatLong);
        }

        /// <summary>
        /// 查询网上支付情况
        /// </summary>
        /// <param name="sosysno">订单编号</param>
        /// <returns>true: 已通过网上支付 / false: 未通过网上支付</returns>
        protected bool IsPayed(int sosysno)
        {
            //查询网上支付情况
            return NetPayManager.GetInstance().IsPayed(sosysno);
        }

        protected void Submit1_ServerClick(object sender, EventArgs e)
        {
            PayTypeInfo payType = ASPManager.GetInstance().LoadPayType(checkSo.PayTypeSysNo);

            ///////////////////////以下参数是需要设置的相关配置参数，设置后不会更改的///////////////////////////
            string partner = payType.MerchantID;                                //合作身份者ID
            string key = payType.PrivateKey;                         //安全检验码
            string seller_email = "";                             //签约支付宝账号或卖家支付宝帐户
            string input_charset = "gb2312";                                         //字符编码格式 目前支持 gb2312 或 utf-8
            string notify_url = AppConfig.EntLibWebSiteURL + "/payment/notify_url.aspx";   //交易过程中服务器通知的页面 要用 http://格式的完整路径，不允许加?id=123这类自定义参数
            string return_url = AppConfig.EntLibWebSiteURL + "/payment/return_url.aspx";   //付完款后跳转的页面 要用 http://格式的完整路径，不允许加?id=123这类自定义参数
            string show_url = "";                     //网站商品的展示地址，不允许加?id=123这类自定义参数
            string sign_type = "MD5";                                                //加密方式 不需修改
            string antiphishing = "0";                                               //防钓鱼功能开关，'0'表示该功能关闭，'1'表示该功能开启。默认为关闭
            //一旦开启，就无法关闭，根据商家自身网站情况请慎重选择是否开启。
            //申请开通方法：联系我们的客户经理或拨打商户服务电话0571-88158090，帮忙申请开通
            //若要使用防钓鱼功能，建议使用POST方式请求数据

            ////////////////////////////////////////////////////////////////////////////////////////////////////

            ///////////////////////以下参数是需要通过下单时的订单数据传入进来获得////////////////////////////////
            //必填参数
            string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmss");  //请与贵网站订单系统中的唯一订单号匹配
            string subject = sosysno.ToString();                                    //订单名称，显示在支付宝收银台里的“商品名称”里，显示在支付宝的交易管理的“商品名称”的列表里。
            string body = "SO ";                                   //订单描述、订单详细、订单备注，显示在支付宝收银台里的“商品描述”里
            string total_fee = checkamt.ToString("######0.00");                                       //订单总金额，显示在支付宝收银台里的“应付总额”里

            //扩展功能参数——网银提前
            string paymethod = "bankPay";                                   //默认支付方式，四个值可选：bankPay(网银); cartoon(卡通); directPay(余额); CASH(网点支付)
            string defaultbank = "CMB";                                     //默认网银代号，代号列表见http://club.alipay.com/read.php?tid=8681379

            //扩展功能参数——防钓鱼
            string encrypt_key = "";                                        //默认关闭，用于防止模拟提交、防钓鱼等功能
            string exter_invoke_ip = "";                                    //买家本地电脑的IP地址
            //if (antiphishing == "1")
            //{
            //    encrypt_key = AlipayFunction.Query_timestamp(partner);
            //    exter_invoke_ip = "";                                       //填写上买家本地电脑的IP地址
            //}

            //扩展功能参数——其他
            string extra_common_param = "";                //自定义参数，可存放任何内容（除=、&等特殊字符外），不会显示在页面上
            string buyer_email = "";			                            //默认买家支付宝账号

            //扩展功能参数——分润(若要使用，请按照注释要求的格式赋值)
            string royalty_type = "";                                   //提成类型，该值为固定值：10，不需要修改
            string royalty_parameters = "";
            //提成信息集，与需要结合商户网站自身情况动态获取每笔交易的各分润收款账号、各分润金额、各分润说明。最多只能设置10条
            //提成信息集格式为：收款方Email_1^金额1^备注1|收款方Email_2^金额2^备注2
            //如：
            //royalty_type = "10";
            //royalty_parameters = "111@126.com^0.01^分润备注一|222@126.com^0.01^分润备注二";

            //扩展功能参数——自定义超时(若要使用，请按照注释要求的格式赋值)
            //该功能默认不开通，需联系客户经理咨询
            string it_b_pay = "";  //超时时间，不填默认是15天。八个值可选：1h(1小时),2h(2小时),3h(3小时),1d(1天),3d(3天),7d(7天),15d(15天),1c(当天)

            /////////////////////////////////////////////////////////////////////////////////////////////////////

            //构造请求函数
            AlipayService aliService = new AlipayService(partner, seller_email, return_url, notify_url, show_url, out_trade_no, subject, body, total_fee, paymethod, defaultbank, encrypt_key, extra_common_param, royalty_type, royalty_parameters, it_b_pay, key, input_charset, sign_type);

            //GET方式传递
            string url = aliService.Create_url();
            string sHtmlText = "<a href=" + url + "><img border='0' src='img/alipay.gif' /></a>";

            //POST方式传递，得到加密结果字符串。想POST方式传递，请把下面那句注释去掉。
            //string sHtmlText = aliService.Build_postform();
            Response.Redirect(url);

        }
    }
}
